#![allow(dead_code)]
#[allow(unused_imports)]
use tauri_plugin_log::{Builder, RotationStrategy, Target, TargetKind};
use dirs_next::data_dir;

pub fn setup_logger(app: &tauri::AppHandle) -> Result<(), tauri::Error> {
    // 获取应用名称
    let app_name = app.package_info().name.clone();

    // 确定日志目录
    let log_dir = if cfg!(debug_assertions) {
        // 开发环境：使用当前目录下的 logs 文件夹
        data_dir()
            .unwrap_or_else(|| std::env::current_dir().unwrap())
            .join(&app_name)
            .join("logs")
    } else {
        // 生产环境：使用应用数据目录
        data_dir()
            .unwrap_or_else(|| std::env::current_dir().unwrap())
            .join(&app_name)
            .join("logs")
    };

    // 创建日志目录
    if !log_dir.exists() {
        let _ = std::fs::create_dir_all(&log_dir);
    }

    // 配置日志目标
    let mut targets = vec![];

    if cfg!(debug_assertions) {
        // 开发环境：记录到控制台和文件
        targets.push(Target::new(TargetKind::Stdout));
        targets.push(Target::new(TargetKind::Webview));
        targets.push(Target::new(TargetKind::Folder {
            path: log_dir.clone(),
            file_name: Some(format!("{}-debug", app_name)),
        }));
    } else {
        // 生产环境：只记录错误到文件
        targets.push(Target::new(TargetKind::Folder {
            path: log_dir.clone(),
            file_name: Some(format!("{}-error", app_name)),
        }));
    }

    // 创建日志配置
    let mut logger = Builder::new().targets(targets);

    // 设置日志级别
    if cfg!(debug_assertions) {
        logger = logger.level(log::LevelFilter::Debug);
    } else {
        //logger = logger.level(log::LevelFilter::Debug);
        logger = logger.level(log::LevelFilter::Error);
    }

    // 设置日志轮转策略（仅生产环境）
    #[cfg(not(debug_assertions))]
    {
        logger = logger.rotation_strategy(RotationStrategy::KeepSome(10));
    }

    // 应用日志配置
    app.plugin(logger.build())?;

    // 记录日志初始化信息
    log::info!("日志系统已初始化");

    Ok(())
}